/**
 * Created with IntelliJ IDEA.
 * Description:
 * https://gitee.com/li--jiaqiang/java-test.git
 * git pull
 * git pull origin master
 * git pull origin master --allow-unrelated-histories
 * User: 86187
 * Date: 2022-04-23
 * Time: 23:08
 */

//Scanner scan = new Scanner(System.in);


public class TestDemo {

    /**
     * 给定两个大小分别为 m 和 n 的正序（从小到大）数组nums1和nums2。请你找出并返回这两个正序数组的 中位数 。
     * 算法的时间复杂度应该为 O(log (m+n)) 。
     * 示例1：
     * 输入：nums1 = [1,3], nums2 = [2]
     * 输出：2.00000
     * 解释：合并数组 = [1,2,3] ，中位数 2
     *
     * 示例2：
     * 输入：nums1 = [1,2], nums2 = [3,4]
     * 输出：2.50000
     * 解释：合并数组 = [1,2,3,4] ，中位数 (2 + 3) / 2 = 2.5
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode-cn.com/problems/median-of-two-sorted-arrays
     * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
     *
     * 链接：https://leetcode-cn.com/problems/median-of-two-sorted-arrays
     *
     * @param nums1
     * @param nums2
     * @return
     */
    public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
        if(nums1.length == 0 && nums2.length == 0) {
            return 0.0;
        }

        if(nums1.length == 0) {

            if(nums2.length == 1) {
                return nums2[0]*1.0;

            } else if(nums2.length % 2 == 0) {
                return (nums2[nums2.length/2]+nums2[nums2.length/2-1])/2.0;

            } else {
                return nums2[nums2.length/2]*1.0;
            }
        }

        if(nums2.length == 0) {

            if(nums1.length == 1) {
                return nums1[0]*1.0;

            } else if(nums1.length % 2 == 0) {
                return (nums1[nums1.length/2]+nums1[nums1.length/2-1])/2.0;

            } else {
                return nums1[nums1.length/2]*1.0;
            }
        }

        int i = 0, j = 0,k = 0;
        int newlength = nums1.length+nums2.length;
        int[] arr = new int[newlength];

        while(i < nums2.length && j < nums1.length) {
            if(nums1[j] < nums2[i]) {
                arr[k++] = nums1[j++];

            } else {
                arr[k++] = nums2[i++];

            }
        }

        if(i == nums2.length) {
            for(int m=j; m<nums1.length; m++) {
                arr[k++] = nums1[m];
            }
        } else {
            for(int n=i; n<nums2.length; n++) {
                arr[k++] = nums2[n];
            }
        }

        if(newlength % 2 == 0) {
            return (arr[newlength/2]+arr[newlength/2-1])/2.0;
        }else {
            return arr[newlength/2]*1.0;
        }

    }

    public static void main(String[] args) {
        int[] nums1 = {};
        int[] nums2 = {1,2,3,4,5};

        System.out.println(findMedianSortedArrays(nums1, nums2));

    }
}
